package eva.savant.businessobject.ad;

import javax.persistence.*;
import java.io.Serializable;

@Table(name="AD_USUARIO_ROL")
@IdClass(UsuarioRolPK.class)
@javax.persistence.Entity(name = "ad.UsuarioRol")
public class UsuarioRol extends eva.savant.businessobject.Entity {

    @ManyToOne
    @JoinColumn(name = "ID_USUARIO", insertable = false, updatable = false)
    private Usuario usuario; //ID Usuario

    @ManyToOne
    @JoinColumn(name = "ID_ROL", insertable = false, updatable = false)
    private Rol rol; //ID Rol

    @Basic
    @Column(name = "ID_TRANSACCION", length = 5, nullable = true)
    private String idTransaccion; //ID Transaccion Reciente

    @Basic
    @Column(name = "THEME", length = 15, nullable = true)
    private String theme; //Theme Para Aplicacion

    @Id
    @Column(name="ID_USUARIO")
    private Integer usuario_Id; //ID Usuario

    @Id
    @Column(name="ID_ROL")
    private String rol_Id; //ID Rol


    public UsuarioRol(Usuario usuario, Rol rol, String idTransaccion, String theme, Integer operacionId, String sociedadId, Integer usuarioId) {

        this.usuario= usuario;

        this.usuario_Id= usuario.getId();

        this.rol= rol;

        this.rol_Id= rol.getId();

        this.idTransaccion= idTransaccion;

        this.theme= theme;

        this.operacionId= operacionId;

        this.sociedadId= sociedadId;

        this.usuarioId= usuarioId;

    }

    public UsuarioRol() {

    }


    public Usuario getUsuario() {
    
        return usuario;
    }
    
    public void setUsuario(Usuario usuario) {
    
        this.usuario = usuario;

        this.usuario_Id= usuario.getId();
    }

    public Rol getRol() {
    
        return rol;
    }
    
    public void setRol(Rol rol) {
    
        this.rol = rol;

        this.rol_Id= rol.getId();
    }

    public String getIdTransaccion() {
    
        return idTransaccion;
    }
    
    public void setIdTransaccion(String idTransaccion) {
    
        this.idTransaccion = idTransaccion;
    }

    public String getTheme() {
    
        return theme;
    }
    
    public void setTheme(String theme) {
    
        this.theme = theme;
    }

}

class UsuarioRolPK implements Serializable {


    private Integer usuario_Id;

    private String rol_Id;


    public UsuarioRolPK(Integer usuario_Id, String rol_Id) {

        this.usuario_Id= usuario_Id;

        this.rol_Id= rol_Id;

    }

    public UsuarioRolPK() {

    }


    public Integer getUsuario_Id() {
    
        return usuario_Id;
    }
    
    public void setUsuario_Id(Integer usuario_Id) {
    
        this.usuario_Id = usuario_Id;
    }

    public String getRol_Id() {
    
        return rol_Id;
    }
    
    public void setRol_Id(String rol_Id) {
    
        this.rol_Id = rol_Id;
    }

    @Override
    public boolean equals(Object object) {

        if(object == null) return false;

        if(object == this) return true;

        if( !(object instanceof UsuarioRolPK) ) return false;


        UsuarioRolPK pk = (UsuarioRolPK) object;


        return pk.getUsuario_Id().equals(usuario_Id) &&

               pk.getRol_Id().equals(rol_Id);
    }

    @Override
    public int hashCode() {

        int hashCode = 17;

        hashCode = 31 * hashCode + usuario_Id.hashCode();

        hashCode = 31 * hashCode + rol_Id.hashCode();

        return hashCode;
    }

}
